package day16.zhiyou100;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo01 implements Serializable {//Serializable 标记接口

    public static void m1() {
        String path = "E:\\321-Java正课\\day02\\resouce";// \ 它是转移字符 Windows--> \\ 或者 /    Linux---> /
        // 路径分隔符 Windows--->;  Linux---> :
        // 字段属性
        String separator = File.separator;
        System.out.println(separator);//  ----> \---->linux不识别----> /
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);// ---> ;----->linux不识别   :
        // 可视化界面  乌班图  centos  RedHat
    }
    // 构造方法
    public static void m2() {
        // File(String pathname)  路径可以是真实存在的，也可以是虚拟的(不存在)
        File file = new File("D:\\aa\\bb\\cc.txt");
        System.out.println(file);// D:\aa\bb\cc.txt

        /*File file2 = new File("D:\\abc\\bcd");
        System.out.println(file2);// D:\abc\bcd*/

        // File(String parent,String child)
        String parentPath = "D:\\aa\\bb";
        String childPath = "cc.txt";
        File file3 = new File(parentPath,childPath);
        System.out.println(file3);// D:\aa\bb\cc.txt

        // File(File parent,String child)
        File parent = new File("D:\\aa\\bb");
        File file4 = new File(parent,childPath);
        System.out.println(file4);// D:\aa\bb\cc.txt
        // URL--->链接 统一资源定位符  URI--链接

    }

    // API方法
    public static void m3() throws IOException {
        /*
            createNewFile() 在本地生成一个具体的文件 创建成功返回true 创建失败返回false
                            如果创建文件中的路径有不存在，程序报异常提示：找不到路径
         */
        File file = new File("D:\\aa\\bb\\cc.txt");
        // 通过程序创建一个在D:\aa\bb\路径下的cc.txt
        boolean newFile = file.createNewFile();
        System.out.println(newFile);//

        File file2 = new File("D:\\aa\\bb\\dd.txt");
        // 通过程序创建一个在D:\aa\bb\路径下的cc.txt
        boolean newFile2 = file2.createNewFile();
        System.out.println(newFile2);// true

        /*File file3 = new File("D:\\aa\\bb\\cc\\dd.txt");
        // 通过程序创建一个在D:\aa\bb\路径下的cc.txt
        boolean newFile3 = file3.createNewFile();
        System.out.println(newFile3);// */

        // 创建文件夹(目录) mkdir----> make directory
        File file4 = new File("D:\\aa\\bb\\cc");
        boolean mkdir = file4.mkdir();
        System.out.println(mkdir);// true

        File file5 = new File("D:\\aa\\bb\\dd\\ee");
        boolean mkdir1 = file5.mkdir();
        System.out.println(mkdir1);// false

        // 如果想要生成多层目录 mkdirs()
        File file6 = new File("D:\\aa\\bb\\dd\\ee");
        boolean mkdirs = file6.mkdirs();
        System.out.println(mkdirs);//

        // 删除文件或者文件夹 delete() 删除成功后，不会放进回收站中 如果文件夹中信息不会删除，只能删除空文件夹
        File file7 = new File("D:\\aa\\bb\\dd\\ee");
        boolean delete = file7.delete();
        System.out.println(delete);// true 删除ee文件夹

        //D:\aa\bb\cc.txt文件
        File file8 = new File("D:\\aa\\bb\\cc.txt");
        boolean delete1 = file8.delete();
        System.out.println(delete1);//

        // 删除D:\aa\bb\dd 中的dd文件夹 此时dd文件夹中ee.txt文件
        File file9 = new File("D:\\aa\\bb\\dd");
        boolean delete2 = file9.delete();
        System.out.println(delete2);//

        // 删除D:\aa\bb\dd\ee.txt文件  此时ee.txt文件中是否数据
        File file10 = new File("D:\\aa\\bb\\dd\\ee.txt");
        boolean delete3 = file10.delete();
        System.out.println(delete3);//

        // 创建一个文件 没有扩展名
        File file11 = new File("D:\\aa\\bb\\dd\\ee");
        boolean newFile1 = file11.createNewFile();
        System.out.println(newFile1);//

    }

    public static void m4() throws IOException{
        // 创建一个文件 没有扩展名
        File file11 = new File("D:\\aa\\bb\\dd\\ee");
        boolean newFile1 = file11.createNewFile();
        System.out.println(newFile1);//
    }

    // File类中的获取功能
    public static void m5() throws IOException {
        // 操作"D:\\aa\\bb\\dd中的ff.txt文件
        File file1 = new File("D:\\aa\\bb\\dd\\ff.txt");
        // 获取文件的名称
        String name = file1.getName();
        System.out.println(name);//
        String path = "D:\\aa\\bb\\dd\\ff.txt";
        String[] split = path.split("\\\\");
        System.out.println(split[split.length-1]);

        // 获取文件的路径
        /*
            getPath()：          获取的是File构造方法中填写的路径
            getAbsolutePath():   获取的是该文件的(相对于当前项目)绝对路径(是以盘符为开头的路径)
         */
        String path1 = file1.getPath();
        System.out.println(path1);// D:\aa\bb\dd\ff.txt
        String absolutePath = file1.getAbsolutePath();
        System.out.println(absolutePath);// D:\aa\bb\dd\ff.txt
        // 绝对路径/相对路径--->classpath类路径
        File file2 = new File("src/com/zhiyou100/Demo01.java");// Content root路径
        String path2 = file2.getPath();
        System.out.println(path2);//
        String absolutePath2 = file2.getAbsolutePath();
        System.out.println(absolutePath2);//

        // 获取文件
        File file3 = new File("C:\\Users\\Administrator\\Desktop\\aa.txt");
        File absoluteFile = file3.getAbsoluteFile();
        // 获取该文件中字节个数
        long length = absoluteFile.length();
        System.out.println(length);// 2
        // 获取该文件的父目录
        String parent = absoluteFile.getParent();
        System.out.println(parent);//C:\Users\Administrator\Desktop
        File parentFile = absoluteFile.getParentFile();// 此时该File表示的是目录
        System.out.println(parentFile.getName());//
        System.out.println(parentFile.length());//

        File file = new File("D:\\aa");
        System.out.println(file.length());//

    }

    // File判断功能
    public static void m6() throws IOException {
        // 判断路径是否真实存在
        File file = new File("D:\\aa\\bb");
        boolean exists = file.exists();
        System.out.println(exists);// true
        // 判断file是文件夹还是文件?
        boolean result1 = file.isFile();
        System.out.println(result1);// false

        boolean result2 = file.isDirectory();
        System.out.println(result2);// true
        if (!file.isFile()) {
            System.out.println("它是文件夹");
        }
    }

    public static void m7() throws IOException {
       File file = new File("D:\\develop");
       System.out.println(file.length());

    }

    // 练习
    public static void m8() throws IOException {
        // 在C盘的根目录中创建一个文件夹temp
        File file = new File("C:\\temp");// 只是虚拟的temp文件夹
        boolean mkdirs = file.mkdirs();
        System.out.println(mkdirs);//
        // 并在temp目录下创建text.txt文件
        if (file.isDirectory()) {
            // 存在
            File file2 = new File(file,"text.txt");
            //
            boolean newFile = file2.createNewFile();// 此时把虚拟文件变成真实文件
            System.out.println(newFile);//
            //判断text.txt文件是否存在，存在则输出文件的名称
            if (file2.exists()) {
                String name = file2.getName();
                System.out.println(name);//
            }
        }
    }

    //文件遍历
    public static void m9() throws IOException{
        // String[] list()
        File file = new File("D:\\aa");
        /*String[] list = file.list();
        // 打印查看list
        System.out.println(Arrays.toString(list));// [bb, bb.txt, cc, dd]*/

        // File[] listFile()
        File[] files = file.listFiles();// 文件或者文件夹
        // 打印
        System.out.println(Arrays.toString(files));//[D:\aa\bb, D:\aa\bb.txt, D:\aa\cc, D:\aa\dd]
        for (File file1 : files) {
            if (file1.isDirectory()) {
                File[] file11 = file1.listFiles();// 文件或者文件夹

            }
        }
        // 递归 方法调用 方法内部调用

        /*File[] files1 = File.listRoots();
        System.out.println(Arrays.toString(files1));*/
    }

    //文件过滤器
    public static void m10() throws IOException {
        File file = new File("D:\\aa");
        // listFiles(FileFilter)
        // 取出扩展名为.java的所有文件
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".java");
            }
        });
        System.out.println(Arrays.toString(files));//[D:\aa\aa.java, D:\aa\dd.java]

        // FilenameFiler
        //FilenameFilter
        File[] listFiles = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //File f = new File(dir, name);
                return name.endsWith(".java");
            }
        });
        // 打印输出
        System.out.println(Arrays.toString(listFiles));
    }

    public static void main(String[] args) throws IOException {
        m10();
    }

}
